"""
    Information：该代码中主要用于：定义和屡屡逻辑的过程
    Time：2022年3月22日21:16:23
    Author: 梦否
"""

class Simulate(object):

    def __init__(self):
        """
            定义参数
        """
        self.rho = 0  # 密度
        self.u = 0  # 流速
        self.P = 0  # 压强
        self.A = 0 # 截面积
        self.gamma = 0 # 气体比热比
        self.f_TU = 0 # 隧道的摩擦系数
        self.f_TR = 0 # 列车的摩擦系数
        self.S_TU = 0 # 隧道的截面周长
        self.S_TR = 0 # 列车的截面周长
        self.X_min = 0 # 列车初始位置
        self.X_TU_min = 100  # 隧道的最短长度位置
        self.X_TU_max = 300  # 隧道的最长长度位置
        self.X_max = (self.X_TU_max - self.X_TU_min) * 100 # 列车最大位置
        self.v_TR = 30  # 列车速度

    def getF_TU(self, x):
        """
        :param x: 列车位置
        :return:
        """
        if x > self.X_TU_min and x < self.X_TU_max:
            return 0.5 * self.f_TU * self.rho * self.u * abs(self.u) * self.S_TU
        else:
            return 0

    def getF_TR(self, x):
        """
        :param x: 列车位置
        :return:
        """
        if x > self.X_TU_min and x < self.X_TU_max:
            return 0.5 * self.f_TR * self.rho * (self.u - self.v_TR) * abs(self.u - self.v_TR) * self.S_TU
        else:
            return 0

    def getF(self, x):
        """
        隧道壁面摩擦力与列车表面摩擦力之和
        :param x: 列车位置
        :return:
        """
        return self.getF_TU(x) + self.getF_TR(x)

    def getW_FTU(self, x):
        """
        :param x: 列车位置
        :return:
        """
        if x > self.X_TU_min and x < self.X_TU_max:
            return 0.5 * self.f_TU * self.rho * self.u * abs(self.u) * self.S_TU
        else:
            return 0

    def getW_FTR(self, x):
        pass

